package com.adee.primary.t01_arr;

import java.util.Arrays;
import java.util.Scanner;

public class T002 {
    public static void main(String[] args) {

    }

    // 解法一，根据递归公式直接写代码
    public static void test1() {
        // 3 10 1 8 22 13 118 7 19 33 10 9 7 10 1 1 13 8 8 8 8 19
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            // 读取一行
            String s = in.nextLine();
            String[] arr = s.split("[\\s,]");
            int[] price = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
            // dp[i][0] 表示第i天手里没股票的总利润
            // dp[i][1] 表示第i天手里有股票的总利润
            // dp[i+1][0] = max(dp[i][0], dp[i][1]+price[i+1])
            // dp[i+1][1] = max(dp[i][1], dp[i][0]-price[i+1])
            int[][] dp = new int[price.length][2];
            dp[0][0] = 0;
            dp[0][1] = -price[0];
            for (int i = 0; i < price.length-1; i++) {
                dp[i+1][0] = Integer.max(dp[i][0], dp[i][1]+price[i+1]);
                dp[i+1][1] = Integer.max(dp[i][1], dp[i][0]-price[i+1]);
            }
            System.out.println(Integer.max(dp[price.length-1][0], dp[price.length-1][1]));
        }
    }

    // 对解法一的优化，计算第i天的利润时，只需要第i-1天的持有股票利润和不持有股票利润两个值即可，因此
    // 不用将i-1天之前的利润都记录，只使用两个变量记录即可
    public static void test2() {
        // 3 10 1 8 22 13 118 7 19 33 10 9 7 10 1 1 13 8 8 8 8 19
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            // 读取一行
            String s = in.nextLine();
            String[] arr = s.split("[\\s,]");
            int[] price = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
            int p0 = 0;         // 前一天手里没股票的利润
            int p1 = -price[0]; // 前一天手里有股票的利润
            for (int i = 1; i < price.length; i++) {
                int c0 = Integer.max(p0, p1+price[i]);
                int c1 = Integer.max(p1, p0-price[i]);
                p0 = c0;
                p1 = c1;
            }
            System.out.println(Integer.max(p0, p1));
        }
    }
}
